{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "“perceptron.ipynb”的副本",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.2"
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2Rs9taXvrXIX",
        "colab_type": "text"
      },
      "source": [
        "# 第2章 感知机\n",
        "\n",
        "二分类模型"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qxcj1YbyrXIY",
        "colab_type": "text"
      },
      "source": [
        "$f(x) = sign(w*x + b)$\n",
        "\n",
        "损失函数 $L(w, b) = -\\Sigma{y_{i}(w*x_{i} + b)}$\n",
        "\n",
        "---\n",
        "#### 算法\n",
        "\n",
        "随即梯度下降法 Stochastic Gradient Descent\n",
        "\n",
        "随机抽取一个误分类点使其梯度下降。\n",
        "\n",
        "$w = w + \\eta y_{i}x_{i}$\n",
        "\n",
        "$b = b + \\eta y_{i}$\n",
        "\n",
        "当实例点被误分类，即位于分离超平面的错误侧，则调整w, b的值，使分离超平面向该无分类点的一侧移动，直至误分类点被正确分类"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kTw0KxLQrXIZ",
        "colab_type": "text"
      },
      "source": [
        "拿出iris数据集中两个分类的数据和[sepal length，sepal width]作为特征"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Jd4gLSQZrXIa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "from sklearn.datasets import load_iris\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Awm6TTnwrXId",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# load data\n",
        "iris = load_iris()\n",
        "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n",
        "df['label'] = iris.target"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gr7UQ1VerxCv",
        "colab_type": "code",
        "outputId": "570b24ce-722d-4180-efc3-c5c49a10f1f0",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        }
      },
      "source": [
        "df.head()"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>sepal length (cm)</th>\n",
              "      <th>sepal width (cm)</th>\n",
              "      <th>petal length (cm)</th>\n",
              "      <th>petal width (cm)</th>\n",
              "      <th>label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>5.1</td>\n",
              "      <td>3.5</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>4.9</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>4.7</td>\n",
              "      <td>3.2</td>\n",
              "      <td>1.3</td>\n",
              "      <td>0.2</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4.6</td>\n",
              "      <td>3.1</td>\n",
              "      <td>1.5</td>\n",
              "      <td>0.2</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5.0</td>\n",
              "      <td>3.6</td>\n",
              "      <td>1.4</td>\n",
              "      <td>0.2</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   sepal length (cm)  sepal width (cm)  ...  petal width (cm)  label\n",
              "0                5.1               3.5  ...               0.2      0\n",
              "1                4.9               3.0  ...               0.2      0\n",
              "2                4.7               3.2  ...               0.2      0\n",
              "3                4.6               3.1  ...               0.2      0\n",
              "4                5.0               3.6  ...               0.2      0\n",
              "\n",
              "[5 rows x 5 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "I09dAZWgrXIf",
        "colab_type": "code",
        "outputId": "13e919bc-3953-47fb-ac4f-5f50c897e275",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 89
        }
      },
      "source": [
        "#\n",
        "df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']\n",
        "df.label.value_counts()"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "2    50\n",
              "1    50\n",
              "0    50\n",
              "Name: label, dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pfXBMB1srXIj",
        "colab_type": "code",
        "outputId": "2879b376-7537-4ed6-d660-0e8598d5006c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 301
        }
      },
      "source": [
        "# plot dataset\n",
        "plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='-1')\n",
        "plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')\n",
        "plt.xlabel('sepal length')\n",
        "plt.ylabel('sepal width')\n",
        "plt.legend()"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f737e540b38>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "G6mDw2H4rXIn",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# 将df前100行的第一二及最后一列作为数据集\n",
        "data = np.array(df.iloc[:100, [0, 1, -1]])\n",
        "X, y = data[:,:-1], data[:,-1]\n",
        "y = np.array([1 if i == 1 else -1 for i in y])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b-X8nfcrtZGZ",
        "colab_type": "code",
        "outputId": "3d4bfd87-a2e7-4fb5-ad2b-bdf674d7cd26",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "X.shape"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(100, 2)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DEkk5QtatyKe",
        "colab_type": "code",
        "outputId": "027d7120-eed1-4f05-8026-2a3b87c0bc2d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "y.shape"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(100,)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xRat7632rXIs",
        "colab_type": "text"
      },
      "source": [
        "## Perceptron"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "o1SudzvBrXIt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# 原始形式 2.1\n",
        "class PLA:\n",
        "    def __init__(self, max_iter=1000, shuffle=False):\n",
        "        self.b = 0\n",
        "        self.lr = 0.1\n",
        "        self.max_iter = max_iter\n",
        "        self.iter = 0\n",
        "        self.shuffle = shuffle\n",
        "        \n",
        "    def sign(self, x, w, b):\n",
        "        return np.dot(x, w) + b\n",
        "    \n",
        "    def fit(self, X, y):\n",
        "        N, M = X.shape\n",
        "        self.w = np.ones(M)\n",
        "        for n in range(self.max_iter):\n",
        "            self.iter = n\n",
        "            wrong_items = 0\n",
        "            if self.shuffle: #每次迭代，是否打乱\n",
        "                idx = np.random.permutation(range(N))\n",
        "                X,y = X[idx],y[idx]\n",
        "            for i in range(N):\n",
        "                if y[i] * self.sign(X[i], self.w, self.b) <= 0:\n",
        "                    self.w += self.lr * np.dot(y[i], X[i])\n",
        "                    self.b += self.lr * y[i]\n",
        "                    wrong_items += 1\n",
        "            if wrong_items == 0:\n",
        "                print(\"finished at iters: {}, w: {}, b: {}\".format(self.iter, self.w, self.b))\n",
        "                return \n",
        "        print(\"finished for reaching the max_iter: {}, w: {}, b: {}\".format(self.max_iter, self.w, self.b))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "80ndC9hpo6mW",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# 对偶形式 2.3\n",
        "class PLA_dual:\n",
        "    def __init__(self, max_iter=1000):\n",
        "        self.b = 0\n",
        "        self.lr = 0.1\n",
        "        self.max_iter = max_iter\n",
        "        self.iter = 0\n",
        "    \n",
        "    def cal_w(self, X):\n",
        "        w = 0\n",
        "        for i in range(len(self.alpha)):\n",
        "            w += self.alpha[i]*y[i]*X[i]\n",
        "        return w\n",
        "    \n",
        "    def gram_matrix(self, X):\n",
        "        return np.dot(X, X.T)\n",
        "    \n",
        "    def fit(self, X, y):\n",
        "        N, M = X.shape\n",
        "        self.alpha = np.zeros(N)\n",
        "        gram = self.gram_matrix(X)\n",
        "        for n in range(self.max_iter):\n",
        "            self.iter = n\n",
        "            wrong_items = 0\n",
        "            for i in range(N):\n",
        "                tmp = 0\n",
        "                for j in range(N):\n",
        "                    tmp += self.alpha[j] * y[j] * gram[i,j]\n",
        "                tmp += self.b\n",
        "                if y[i] * tmp <= 0:\n",
        "                    self.alpha[i] += self.lr\n",
        "                    self.b += self.lr * y[i]\n",
        "                    wrong_items += 1\n",
        "            if wrong_items == 0:\n",
        "                self.w = self.cal_w(X)\n",
        "                print(\"finished at iters: {}, w: {}, b: {}\".format(self.iter, self.w, self.b))\n",
        "                return\n",
        "        self.w = self.cal_w(X)\n",
        "        print(\"finished for reaching the max_iter: {}, w: {}, b: {}\".format(self.max_iter, self.w, self.b))\n",
        "        return"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fEMEZ59irXIw",
        "colab_type": "code",
        "outputId": "ca783b85-9985-4acd-c383-5d63b4256c6f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "perceptron1 = PLA()\n",
        "perceptron1.fit(X, y)"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 678, w: [  7.8 -10. ], b: -12.099999999999973\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ndtAsdrqngKO",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "1c91b912-a25c-4903-a900-30431de8fe63"
      },
      "source": [
        "perceptron2 = PLA(shuffle=True)\n",
        "perceptron2.fit(X, y)"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 474, w: [ 6.87 -8.71], b: -10.899999999999977\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GLJ8Syrax80V",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "27879d2d-e235-4e8a-d530-55d4ca360d74"
      },
      "source": [
        "perceptron3 = PLA_dual()\n",
        "perceptron3.fit(X, y)"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 691, w: [  7.88 -10.07], b: -12.299999999999972\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wlDN4I7YrXIz",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def plot(model, tilte):\n",
        "    x_points = np.linspace(4, 7, 10)\n",
        "    y_ = -(model.w[0]*x_points + model.b)/model.w[1]\n",
        "    plt.plot(x_points, y_)\n",
        "    print(y_)\n",
        "\n",
        "    plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='-1')\n",
        "    plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n",
        "    plt.xlabel('sepal length')\n",
        "    plt.ylabel('sepal width')\n",
        "    plt.title(tilte)\n",
        "    plt.legend()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FmDVis0SoPEc",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 313
        },
        "outputId": "442d715d-326b-4351-ad12-18dec45f1ed6"
      },
      "source": [
        "plot(perceptron1, 'PLA with no shuffle')"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[1.91 2.17 2.43 2.69 2.95 3.21 3.47 3.73 3.99 4.25]\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl8VOX1+PHPIQFCWGUTBEIQEIGw\nI4obLrgj0KpVq624lFa0LtX6/VkBK4hLq9Zdi9rWBbfaimyiiIhSFQRFCDuyhkX2NQSynN8f9xJC\nzHKT3Jl7Z+a8X695JXPnzjPnmYE5uc8qqooxxhgDUC3oAIwxxoSHJQVjjDGFLCkYY4wpZEnBGGNM\nIUsKxhhjCllSMMYYU8iSgklIIpImIvtEJKmMc1RE2kUzrrKIyBARmVWF5/9MRNa79e4hIh1EZL6I\n7BWR20TkXyLyoJ8xm9hjScFEjYisEZED7pfSj+6XUB33sc9E5KYynlvHfd6HfsSiqutUtY6q5nt5\n/TjxGHCrW+/vgHuAGapaV1WfDjg2ExKWFEy0XaqqdYCeQG9guMfnXQYcBM4TkWaRCi7OtQYWlXHf\nGEsKJhiqugH4EMjw+JTrgBeBBcC1pZ0kIg+IyDPu79VFZL+I/NW9X0tEckSkoYiku81DySIyBjgD\neNa9Gnm2SJH9RWSFiOwSkedEREp53T+LyLsi8prbHLNIRHoXebyjezWyy31sYBl1GCIiq9xyVovI\nNcUef0xEdrqPXVTk+BoR6V8spjdEpKaI7AOSgO9F5AcR+RQ4u0idTyghjgFu89IuEflSRLqWFrOJ\nH5YUTCBEpBVwMfCdh3NbA2cB49zbr8s4faZ7LsBJwGbgTPd+X2CZqu4o+gRVvQ/4giNNK7cWeXiA\nW05X4BfABWW89kDgbaABMAF41o2/OjAR+BhoCvweGCciHUqoa23gaeAiVa0LnArML3LKycAyoDHw\nF+CV0hJVkfoddK/OALqpaltVPadYnZcXi6MH8A/gt0Aj4O/ABBGpWdZrmdhnScFE23gR2QXMwvkC\nf8jDc34FLFDVxThfup3dL62SfAW0F5FGOMngFaCF23fRz33NinhEVXep6jpgBtC9jHNnqeoUt5/i\ndaCbe/wUoI5b1iFV/RSYBFxdSjkFQIaI1FLVTapatIlnraq+5L7Gq0Bz4NgK1smLocDfVXW2quar\n6qs4zXenROC1TIhYUjDRNlhVG6hqa1UdpqoHPDzn1zhXCIebnWbiNCf9hFveXJwEcKZ77pfAaVQu\nKWwu8ns2zpe713NTRCQZOA5Yr6oFRR5fC7QoIf79wJXA74BNIjJZRE4s6TVUNdv9tayYKqs1cJfb\ndLTLTeStcOpi4pglBRNqInIq0B64V0Q2i8hmnCaUX7pfuCWZCZwD9AC+ce9fAPQBPi/lOZFcLngj\n0EpEiv5/SwM2lBiI6keqeh7OVcBS4CWPr7MfSC1yvyod8uuBMW4CP3xLVdW3qlCmiQGWFEyYJItI\nSpFbdZwrgmlAJ5ymm+44ndO1gItKKWcmztXFYlU9BHwG3ASsVtWtpTznR+B432pytNk4Vw73uJ3f\nZwGX4jSFHUVEjhWRQW7fwkFgH05zkhfzgavc1+gNXF6FmF8CficiJ4ujtohcIiJ1q1CmiQGWFEyY\nvAAcKHJ7C6dz9xlV3Vzkthqnzb7EJiSc5qJaHLkqWAzkUPpVAsBTwOXuqB5fx+y7ielSnCS2DXge\n+LWqLi3h9GrAH3CuLnbgNHnd7PGlRgBtgZ3AA8CbVYh5LvAbnM7yncBKYEhlyzOxQ2yTHWOMMYfZ\nlYIxxphClhSMMcYUsqRgjDGmUMSTgogkich3IjKphMeGiMhWdyr9/ARYkMwYY0KttHHefrodWALU\nK+Xxd4otK1Cmxo0ba3p6uh9xGWNMwpg3b942VW1S3nkRTQoi0hK4BBiDM8yuytLT05k7d64fRRlj\nTMIQkbVezot089GTOGu2lzX55jIRWSAi77mLpP2EiAwVkbkiMnfr1tLmHhljjKmqiCUFERkAbFHV\neWWcNhFIV9WuOLNWXy3pJFUdq6q9VbV3kyblXv0YY4yppEheKZwGDBSRNTjT+c8RkTeKnqCq21X1\noHv3ZaBXBOMxxhhTjoj1KajqvcC9AO5aL3er6lGbo4hIc1Xd5N4diNMhXWG5ublkZWWRk5NThYij\nKyUlhZYtW1K9evWgQzHGmELRGH10FBEZBcxV1QnAbe4OVHk467wMqUyZWVlZ1K1bl/T0dMrZbyQU\nVJXt27eTlZVFmzZtgg7HGGMKRWXymqp+pqoD3N9HugkBVb1XVTurajdVPbuUBcLKlZOTQ6NGjWIi\nIQCICI0aNYqpKxsTXePGQXo6VKvm/Bw3LuiITKKI+pVCpMRKQjgs1uI10TNuHAwdCtnuFjpr1zr3\nAa65pvTnGeMHW+bCmJC5774jCeGw7GznuDGRZkkhApYuXUrfvn2pWbMmjz32WNDhmBizbl3Fjhvj\np4RMCpFur23YsCFPP/00d999t78Fm4SQllax48b4KeGSwuH22rVrQfVIe62fiaFp06acdNJJNtzU\nVMqYMZCaevSx1FTnuDGRlnBJwdprTdhdcw2MHQutW4OI83PsWOtkNtERN6OPvLL2WhMLrrnGkoAJ\nRsJdKUSqvfa5556je/fudO/enY0bN1atMGOMCUjCJYVItdfecsstzJ8/n/nz53PcccdVrTBjjAlI\nwjUfHb4kv+8+p8koLc1JCH5eqm/evJnevXuzZ88eqlWrxpNPPsnixYupV6+0fYaMMSYcEi4pQOTb\na5s1a0ZWVlbkXsAYYyIk4ZqPjDHGlM6SgjHGmEKWFIwxJuT25uQyauJiZq3YFvHXSsg+BWOMiQWq\nyuSFmxg9aTFb9h6kYe3qnN6+cURf064UjPGB7X9g/LZq6z5+/Y853PrmdzSpW5P3h53Gree0j/jr\n2pWCMVVk+x8YP+Xk5vP8jJW8OHMVNZOr8cDAzlx7SmuSqkVnDxa7UvDJDTfcQNOmTcnIyAg6FBNl\ntp6W8cuMZVs4/2+f8/SnK7moSzOm392P605Nj1pCgERNCqvHwfh0eLOa83N11a/1hwwZwtSpU6tc\njok9tp6WqaqNuw7wu9fncf0/vyE5SXjzppN56qoeNK2bEvVYEq/5aPU4mDMU8t0/7bLXOvcB2lT+\nWv/MM89kzZo1VY/PxJy0NKfJqKTjxpQlN7+Af/5vNU9+soICVf54QQd+c8bx1EgO7u/1xLtS+P6+\nIwnhsPxs57gxlWD7H5jKmLN6B5c8/QUPTVnKqW0bMe3OftxydrtAEwIk4pVCdinX9KUdN6Yc0VhP\ny8SPbfsO8vCUpfzn2yxaNKjFS7/uzXmdjg06rEKJlxRS05wmo5KOG1NJtv+BKU9BgfLWN+v4y9Rl\nZB/KY9hZbbn1nHak1gjX13DiNR91GwNJxa71k1Kd4yam2VwBE1aZG3bzsxe+5L73M+nYvC4f3n4G\n91x4YugSAiRiUmhzDfQZC6mtAXF+9hlbpU5mgKuvvpq+ffuybNkyWrZsySuvvOJPvMaTaOy9bUxF\n7cnJ5c8TFjHw2Vls2JnNk1d2563fnEK7pnWDDq1UoqpBx1AhvXv31rlz5x51bMmSJXTs2DGgiCov\nVuMOo/T0kkcAtW4NNijMRJuqMuH7jYyetITt+w/yq1Nac9f5Hahfq3pgMYnIPFXtXd554bt2MaYS\nbK6ACYuVW/Yx8oNMvvxhO11b1uefQ06iS8v6QYflmSUFExdsroAJ2oFD+Tw7YwVjP19FrepJPDg4\ng6v7pEV1NrIf4iYpqCoisfPmx1qzXdiNGXP0+kNgcwVM9Exf8iP3T1hE1s4D/LxnC+69qCNN6tYM\nOqxKiYukkJKSwvbt22nUqFFMJAZVZfv27aSkRH8Ke7yyuQImCFk7s3lg4mKmLf6R9k3r8PbQUzjl\n+EZBh1UlcdHRnJubS1ZWFjk5OQFFVXEpKSm0bNmS6tWD63gyxlTOobwCXp61iqenr0AQbu/fnhtP\nb0P1pPAO6AxNR7OIJAFzgQ2qOqDYYzWB14BewHbgSlVdU9HXqF69Om3atPEhWmNiy7hxdnUUbV/9\nsJ0RH2Sycss+Luh8LCMv7UyLBrWCDss30Wg+uh1YAtQr4bEbgZ2q2k5ErgIeBa6MQkzGxDzbxyG6\ntu49yENTlvD+dxto1bAW/xjSm3NODM/yFH6J6LWOiLQELgFeLuWUQcCr7u/vAedKLHQKGBMCto9D\ndOQXKK99tYZzHv+MSQs28vtz2vHxHf3iMiFA5K8UngTuAUqbvtcCWA+gqnkishtoBBy1O7WIDAWG\nAqTZGENjAJubEQ3fr9/F8PGZLNywm9PaNWLUoAzaNqkTdFgRFbGkICIDgC2qOk9EzqpKWao6FhgL\nTkezD+EZE/Nsbkbk7M7O5a8fL2Xc7HU0rlOTp6/uwaVdm8fE6MaqiuSVwmnAQBG5GEgB6onIG6p6\nbZFzNgCtgCwRSQbq43Q4G2PKYXMz/Keq/PfbDTw0ZQk7sw8x5NR07jzvBOqlJM4owYglBVW9F7gX\nwL1SuLtYQgCYAFwHfAVcDnyqsTZG1piA2NwMfy3/cS/Dx2cyZ/UOeqQ14LUb+9D5uNhZnsIvUZ+8\nJiKjgLmqOgF4BXhdRFYCO4Croh2PMbHM9nGouuxDeTw9fSUvf7GK2jWTefjnXbiydyuqxdjyFH6J\nSlJQ1c+Az9zfRxY5ngNcEY0YjKmoYcNg7FjIz4ekJKep5vnng47K+EVV+XjxjzwwYREbd+fwi94t\n+b8LT6RRndhcnsIvcbHMhTF+GzYMXnjhyP38/CP3LTHEvnXbs/nzxEV8unQLHY6ty7+v7sFJ6Q2D\nDisU4mKZC2P8lpzsJILikpIgLy/68Rh/HMzLZ+zMVTw7YyXJ1YQ7zzuB605ND/XyFH4JzTIXxsSi\nkhJCWcdN+M1asY2RH2Syatt+Lu7SjBEDOtG8fvwsT+EXSwrGlCApqfQrBRNbtuzJYfTkJUz8fiOt\nG6Xyr+tP4qwOTYMOK7QsKRhTgqFDj+5TKHrcxIa8/AJe/3otj3+8nEP5BdzRvz2/69eWlOqW2cti\nScGYEhzuTLbRR7Hp23U7Gf5+Jos37eHME5rwwMDOtGlcO+iwYoJ1NBtj4sbO/Yf4y0dLeWvOeprV\nS2HkpZ24KKNZQixPUR6vHc3x3+VuYl7//iBy5Na/f9ARRd64cZCeDtWqOT/HjQs6onArKFDenbue\nc5+Yybtzs/jNGW345K5+XNwlMdYr8pM1H5lQ698fpk8/+tj06c7xTz4JJqZIs30SKmbJpj2MGJ/J\n3LU76dX6GB4cnEHH5iVt32K8sOYjE2pl/ZEXY/90PUtPL3n109atYc2aaEcTXvsO5vHktOX888s1\n1EtJ5t6LO3J5z5YJuzxFeWyegjExyvZJKJuq8mHmZkZNXMzmPTlc3acV91xwIsfUrhF0aHHBkoIx\nIWP7JJRuzbb93D9hETOXb6VT83o8f21PeqYdE3RYccU6mk2onXtuxY7HgzFjnH0Rikr0fRJycvN5\n8pPlnP/k58xbu5P7L+3EhFtPs4QQAXalYELtk09+2tl87rnx28kMtk9CcTOXb2XkB5ms3Z7Npd2O\nY/glHTm2XkrQYcUt62g2xoTS5t05jJq0iCkLN3N849qMGpTB6e0bBx1WzLJ5CiZu+D1m32t5Nlcg\nGLn5Bbz8xSrOffwzpi/Zwl3nncCHd5xhCSFKrPnIhJrfY/a9lmdzBYIxd80Oho/PZOnmvZzdoQkP\nDMwgrVFq+U80vrHmIxNqfo/Z91qezRWIrh37D/HIh0t4d24Wx9VP4f6BnTm/07E2G9lHNk/BxAW/\nx+x7Lc/mCkRHQYHyztz1PDp1Kfty8vhtv+O57Zz21K5pX01BsXfehJrfY/a9lmdzBSJv0cbdDB+f\nyXfrdtGnTUMeHJzBCcfWDTqshGcdzSbU/B6z77U8mysQOXtzcnlg4iIufWYW67Zn8/gV3Xhn6CmW\nEELCrhRMqPk9Zt9reTZXwH+qyqQFmxg9aTFb9x3kmpPT+OP5J1I/tXrQoZkirKPZGBNxq7buY+QH\ni5i1chtdWtTnwcEZdGvVIOiwEorNU0hwQY6xt3kA5rCc3Hwe/3gZFz75Bd9n7WLUoM6Mv+U0Swgh\nZs1HcSjIMfY2D8AcNmPpFkZOyGT9jgP8rEcL7r34RJrWteUpws6aj+JQkGPsbR6A2bDrAKMmLuKj\nRT/StkltRg/O4NS2Nhs5aDZPIYEFOcbe5gEkrtz8Av4xazVPfrICRbnnwg7cdPrx1Ei2VupYYkkh\nDgU5xt7mASSm2au2M+KDTJb/uI/+HY/l/ks70aqhLU8RiyyFx6Egx9jbPIDEsm3fQf7w7nyuHPs1\n+w/m89Kve/Pydb0tIcQwu1KIQ0GOsbd5AIkhv0B5a846/jJ1KQdy8xl2Vlt+f057atVICjo0U0XW\n0WyMqZCFWbsZPn4h32ftpu/xjRg9uDPtmtps5LALfJ6CiKSIyBwR+V5EFonIAyWcM0REtorIfPd2\nU6TiMeEzbBgkJ4OI83PYsKqdFwtzM2LZ7gO53P9BJoOem8WGXTk8dVV33vzNyZYQ4o2qRuQGCFDH\n/b06MBs4pdg5Q4BnK1Jur1691MS+m29WhZ/ebr65cue98YZqaurR56SmOscjLcjXjoaCggJ9/9ss\n7TV6mrb5f5N05PiFuiv7UNBhmQoC5qqH79ioNB+JSCowC7hZVWcXOT4E6K2qt3oty5qP4kNyMuTn\n//R4UhLk5VX8vFiYmxGLVm7Zy4jxi/hq1Xa6tazPg4O70KVl/aDDMpUQinkKIpIEzAPaAc8VTQhF\nXCYiZwLLgTtVdX0J5QwFhgKk2ZjFuFDSF31Jx72eFwtzM2LJgUP5PPPpCl76YhW1qifx4OAMru6T\nRlI12/Qm3pWbFESkJnAZkF70fFUdVd5zVTUf6C4iDYD3RSRDVTOLnDIReEtVD4rIb4FXgXNKKGcs\nMBacK4XyXteEX1JS6VcAlTkvFuZmxIpPFv/I/RMWsWHXAS7r2ZJ7Lz6RxnVqBh2WiRIvHc0fAIOA\nPGB/kZtnqroLmAFcWOz4dlU96N59GehVkXJN7Dq8zlF5x72eFwtzM8Ju/Y5sbnp1Lje9NpfUGkm8\nM/QUHv9FN0sIiaa8Tgcg00vnRAnPawI0cH+vBXwBDCh2TvMiv/8M+Lq8cq2jOX7cfLNqUpLTMZuU\n9NPO44qe98Ybqq1bq4o4P6PZ0Rvka1fVwdx8ffbTFdph+BQ9cfiH+uJnK/VQXn7QYRmf4VdHs4iM\nBZ5R1YUVSTYi0hWnOSgJ54rkXVUdJSKj3OAmiMjDwECcq5AdOB3RS8sq1zqajfHPlz9sY8T4TH7Y\nup8LOzdj5KWdOK5BraDDMhFQ5XkKIrJQRBYApwPfisgyEVlQ5HiZVHWBqvZQ1a6qmqFuH4SqjlTV\nCe7v96pqZ1Xtpqpnl5cQjHeRGDfvdb6A3+UFtT+D3/UNky17c7jj7e/45Uuzyc1X/jnkJF78VS+O\n2/lfGJ8Ob1Zzfq6OwwkXpmylXUIArcu6ebkMicTNmo/KF4lx817nC/hdnte6+F1nv+sbFnn5Bfqv\n/63WjJFTtf2fpujjHy3VA4fynAdXvaH6dqrqOI7c3k51jpuYh4/NR6+r6q/KOxYt1nxUvkiMm/c6\nX8Dv8oLan8Hv+obB/PW7GD5+IZkb9nB6u8aMGtSZ45vUOXLC+HTILuFNTG0Ng9dEK0wTIX7OU+hc\nrOAkbJRQqEVi3LzX+QJ+lxfU/gx+1zdIu7Nz+ctHS3lzzjqa1KnJM1f3YEDX5ogUm3OQXcqbVdpx\nE5dKTQoici/wJ6CWiOw5fBg4hDtnwIRTJMbNe50v4Hd5Qe3P4Hd9g6Cq/PfbDTw0ZQk7sw9x/alt\nuPO89tRNqV7yE1LTSrlSiNEJF6ZSSu1oVtWHVbUu8FdVrefe6qpqI1W9N4oxmgqKxLh5r/MF/C4v\nqP0Z/K5vtC3/cS9X/v1r7vr397RulMrE35/OyEs7lZ4QALqNgaRib2JSqnPcJI7SOhuAnmXdvHRY\nROJmHc3eRGLcvNf5An6X57UuftfZ7/pGw76cXH1o8mJte+9k7fbAR/rW7LWan1/gvYBVb6i+31p1\nnDg/rZM5blDVjmYRmeH+mgL0Br7HaT7q6hbeN4K5qlTW0WzMT6kqHy36kVETF7Fxdw5X9m7F/110\nIg1r1wg6NBMSVZ6noM68gbOBTThXBr1VtRfQA9jgX6gmUQU1/yDerNuezQ3/+obfvTGPerWq897v\n+vLo5V1jLyGsHmdzJELAy+ijDlpkNrOqZopIxwjGZBLAuHFO+3x2tnN/7doj7fVFt+T0el4iOpiX\nz99nruK5GStJriYMv6QjQ05NJzkpBrdeXz0O5gyFfPeDzl7r3Adok+AfdJR5mafwFs4CeG+4h67B\n2Tzn6gjHViJrPooPQc0/iBdfrNjKyA8WsXrbfi7p0pwRAzrRrH5K0GFVns2RiDg/5ylcD9wM3O7e\n/xx4oQqxGRPY/INY9+OeHEZPWsykBZtIb5TKqzf0od8JTYIOq+psjkRolJsUVDUH+Jt7M8YXQc0/\niFV5+QW89tVanpi2nEP5BdzZ/wR+2+94UqrH0MSJstgcidAoa0G8d92fC92F8I66RS9EE4+Cmn8Q\ni+at3cmlz/6PUZMW06v1MUy780xu798+fhIC2ByJECnrSuFwc9GAaARiEsvhTuL77nOagtLSnC/6\n4p3HXs+LRzv3H+LRqUt5+5v1NKuXwgvX9OTCjGY/XZ4iHhzuTP7+PqfJKDXNSQjWyRx1XjqabwQ+\nV9UV0QmpbNbRbOJdQYHy3rwsHv5wCXty8rjhtHRu738CdWpGdEt1E+eqPE+hiDTg7yKySkT+LSK/\nF5HuVQ/RFOX3WHyv5QW5Z4DNP/ipJZv2cMXfv+Ke/yygbZM6TL7tdO67pFPVE0I8zQGIp7p4Fc06\ne5n27F5N1AJuA9YB+V6f5/ctHpe58HsvAK/lBblnQCT2fIhle3NydfTERXr8vZO1x6iP9d1v1lVs\neYqyxNM+CfFUF698qjM+7qcwHDgNqAN8B8wCvlDVTZFLVaWLx+Yjv8fiey0vyD0DbP6BQ1WZsnAz\noyYtYsveg1x1UivuueBEjvFzNnI8zQGIp7p45VOd/Zyn8HOcPZQnAzOBr1T1oOdITLn8Hovvtbwg\n9wyw+Qewett+Rn6QyRcrttGpeT1euLYXPdOO8f+F4mkOQDzVxaso17ncPgVV7Qn0B+YA5wELRWRW\nRKJJUKWNua/sWHyv5ZW2N0A09gzwu86xJCc3n79NW84FT37O/HW7+POlnZhw62mRSQhQ+lj/WJwD\nEE918SrKdS43KYhIBs7SFtcBV+IshvdpRKJJUH6PxfdaXpB7BiTq/IPPlm3hgic/56npK7iwczOm\n39WPIae1iex6RfE0ByCe6uJVtOtcXqcDMAm4BzgVqO6loyKSt3jsaFb1fy8Ar+UFuWdAJPZ8CKuN\nu7L15jfmauv/m6Rn/3WGzlqxNboBxNM+CfFUF698qDMeO5oD/YKvzC1ek4LfIvGFGwuJJmwO5eXr\n2Jk/aMcRH+oJ903RZ6Yv15zcvKDDMpUx+2bVN5Oc0T9vJjn3qyqKCc5rUrDZMHEoEstNey1z2DB4\nochyifn5R+4//3zlXjtWfbNmByPGZ7J0817OObEpDwzsTKuGqeU/0YTPnGGwssg/bM0/cr9PJf9h\nh3S58HKHpIZNPA5J9VskhnvGwjDXsNi+7yCPfLiUf8/LokWDWtx/aSfO63RsfC5PkSjeSnYSQXGS\nBFdX8h92lIfX+jkk1cSYSAz3jIVhrkErKFDe/mY9j05dyv6DefyuX1tuO7cdqTXsv1nMKykhlHXc\ni5AOry31X6uITARKvYxQ1YERichUWSSWm/ZaZlJS6VcK8Sxzw26Gj89k/vpdnNymIQ8OzqD9sXWD\nDsv4RZJKv1KorJAuF17WnzCPRS0K46sxY45u/4eqD/f0WubQoUf3KRQ9Ho/25uTy+MfLee2rNTSs\nXYMnftGNn/VoYU1F8abt0KP7FIoer6xuY47uU4BQDK8tNSmo6sxoBmL8E4nlpr2WebgzeexY54oh\nKclJCPHWyayqTFywiQcnLWbrvoNce3Jr7j6/A/VTqwcdmomEw53JP4x1rhgkyUkIle1khtAuF+5l\n7aP2wMNAJ6BwE1hVPT6yoZXMOppN0H7Yuo+RH2Tyv5Xb6dKiPg8OzqBbqwZBh2VMmfxcOvufOHsy\n5wFnA68Bb3gIIEVE5ojI9yKySEQeKOGcmiLyjoisFJHZIpLuIZ6Y4nV56FhYRtrrMttxU+diyxUf\nWvk6j320jAuf/JwFWbsZPagz4285rWIJYc4wZyTLm+L8nFPKm+j3UslhLy9IXusST3UuS3kTGYB5\n7s+FxY+V8zwB6ri/VwdmA6cUO2cY8KL7+1XAO+WVG0uT17wuDx0Ly0h7XWY7bupcwnLF2a/X1N8/\nfJfe+fZ3umVPTsXLnH3z0csfH74VnwTl9/LQYS8vSF7rEgd1xsels78ETgfew1nzaAPwiKp28Jp4\nRCQVZ8ntm1V1dpHjHwF/VtWvRCQZ2Aw00TKCiqXmI69j+2NhGWmv8w/ips6ljCHPqdGSlMvXV65M\nr2Pd/R6/HvbyguS1LnFQZz+bj24HUnE22OkF/ApncTwvQSSJyHxgCzCtaEJwtQDWA6hqHrAbaFRC\nOUNFZK6IzN26dauXlw4Fr2P7Y2EZaa/zD+KlzlrKWPGUQxuqUKjHse5+j18Pe3lB8lqXeKpzObws\nnf2Nqu4D9gC3qerPVfVrL4Wrar6qdgdaAn3cFVcrTFXHqmpvVe3dpEmTyhQRCK/LQ8fCMtJel9mO\nhzp/vWo7W/KalvxgVcaQlzamvfhxv5dKDnt5QfJal3iqczm8LJ3dW0QWAgtw9lL4XkR6VeRFVHUX\nMAO4sNhDG4BW7uskA/WB7RUpO8y8Lg8dC8tIe11mO5brvHXvQf7w7nyuGvs1L+y+gXypdfQJVR1D\nXtqY9uLH/V4qOezlBclrXeKpzuUpr9MBJxmcUeT+6cACD89rAjRwf68FfAEMKHbOLRzd0fxueeXG\nUkezqveVRWNhGWmvq5/GWp3hV+0nAAAX1ElEQVTz8gv0ta/WaJf7p2q7P03Wv05dqtkH8yKzgqXX\nlTb9fu2wlxckr3WJ8TrjY0fzd6rao9ixb9XZka2s53UFXgWScK5I3lXVUSIyyg1ugoikAK8DPYAd\nwFWquqqscmOpo9mE34KsXQwfn8mCrN2c2rYRowZl0K5pnaDDMsZ3fnY0zxSRv4vIWSLST0SeBz4T\nkZ4iUmpiUNUFqtpDVbuqaoaqjnKPj1TVCe7vOap6haq2U9U+5SWEeBb6MftxZveBXEaMz2TQc/9j\n0+4cnrqqO+NuOjnyCSHsY+IjEV/Y50gkyvwDj7ws39jN/Xl/seM9cBbMO8fXiBJQJPY/MCVTVcbP\n38CYyUvYsf8Q1/VN5w/nn0C9lCgsT+F1/fyg1tmPRHx+1yXs5cUB208hBEI/Zj9OrPhxL8PHZzJ7\n9Q66tWrAmMEZZLSoH70Awj4mPhLxhX2ORBzMP/DKt/0URORY4CHgOFW9SEQ6AX1V9RUf4jSEf8x+\nrMs+lMczn67kpc9XUbtmMg/9rAtXndSKatWivJJp2MfERyK+sM+RSKD5B1556VP4F/ARcJx7fzlw\nR6QCSkRhHrMf6z5etJnznvicFz77gcE9WjD9rn788uS06CcECP+Y+EjEF/Y5Egk0/8ArL0mhsaq+\nCxRA4czjBNhHK3rCOGY/1q3fkc1Nr37D0NfnUadmMu/+ti+PXdGNxnVqBhdU2MfERyK+sM+RSKT5\nBx556WjeLyKNcHdhE5FTcJajMD6JxP4HiepgXj4vf7GaZz5dQTUR/nTxiVx/WhuqJ3n5+yfCvK6f\nH9Q6+5GIz++6hL28OOBlnkJP4BkgA8jEmZR2uaouiHx4PxWPHc3GH1+u3MbwDzJZtXU/F2U0Y8SA\nThzXoFb5TzQmAfjW0ayq34pIP6ADznLYy1Q114cYjfHFlj05jJmyhA/mbyStYSr/vP4kzu5QytpF\nsWLOMH93+fJb2OMDZ7hpEFcAQb2uT7yMProCmKqqi0RkONBTRB5U1W8jH54xpcsvUF7/ag2Pf7yc\ng3kF3HZue4ad1ZaU6lXYTD0M5gw7ej9gzT9yPwxfvGGPD8I/1yPEvDQfLVDVriJyOjAaeAwYqaon\nRyPA4qz5yAB8t24nw8dnsmjjHs5o35hRgzJo07h20GH5w+u+C0EJe3wQ/rkeAfCt+YgjI40uAV5S\n1cki8mCVojOmknZlH+IvHy3jrTnraFq3Js/9sicXd2mGSABDTCPF674LQQl7fBD+uR4h5iUpbBCR\nvwPnAY+KSE28DWU1xjeqynvzsnj4w6XsPpDLDae14Y7+7akbjeUpok2SSv9LPAzCHh84bfkl/sUe\nhbkeQbyuj7x8uf8CZ/LaBersi9AQ+GNEozKmiGWb9/KLv3/FH99bQHqjVCbeejojBnSKz4QA3vdd\nCErY44Pwz/UIMS+jj7KB/xa5vwnYFMmgjAHYfzCPp6av4JVZq6mbksyjl3Xhil4BLE8RbYc7a8M6\nuifs8UH453qEmC2IZ0JHVZmauZlRkxazaXcOV53UinsuPJGGtWsEHZoxMcvP/RSMiZq12/dz/b++\n4eZx39IgtQb/uflUHrmsq7eEEAvr4vsd45xhzmigN8X5OWdYuOIzMcdLR7MxEZeTm8/Yz1fx3IyV\nJFcTRgzoxHV9W5PsdXmKWBgf7neMfs8XiIX30EScNR+ZwH2xYisjP1jE6m37GdC1OcMv6USz+ikV\nKyTE48ML+R2j3/MFYuE9NJXm5zwFYyJi8+4cRk9ezOQFm0hvlMprN/ThzBOaVK6wWBgf7neMfs8X\niIX30EScJQUTdXn5BfzryzX8bdpycguUO/ufwG/7HV+15SliYXy43zH6PV8gFt5DE3HW0Wyiat7a\nHQx4ZhYPTl7CSW0aMu3OM7m9f/uqr1cUC+PD/Y7R7/kCsfAemoizKwUTFTv3H+KRD5fyztz1NK+f\nwovX9uSCzj4uTxEL48P9jtHv+QKx8B6aiLOOZhNRBQXKv+et55EPl7I3J48bT2/Dbee2p3ZN+3vE\nmGiyeQomcIs37uHyF7/k//6zkHZN6zD5tjO49+KO8ZkQ/B7f77U8m1dgfBaH/ztN0PYdzONv05bz\nry/XUL9WdR67ohuX9WwRXyuZFuX3+H6v5dm8AhMB1nxkfKOqTF64idGTFrNl70Gu7pPGPRd0oEFq\nnC9P4ff4fq/l2bwCUwE2T8FE1ept+xn5QSZfrNhG5+Pq8eK1veiRdkzQYUWH3+P7vZZn8wpMBFhS\nMFWSk5vP85/9wIuf/UDN5Go8MLAz157SmqR4X8m0KL/H93stz+YVmAiwjmZTaTOWbeH8v33O09NX\ncFGXZky/qx/XnZqeWAkB/B/f77U8m1dgIsCuFEyFbdx1gNGTFvNh5maOb1KbN286mVPbNQ46rOD4\nPb7fa3k2r8BEgHU0G89y8wv45/9W8+QnK8gvUG47tz03ndGGmskh2obRGFOiwOcpiEgrEZkhIotF\nZJGI3F7COWeJyG4Rme/eRkYqHlM136zZwYCnZ/HQlKX0Pb4Rn/yhH7ec3S46CSEWxuLbvIKqs/cm\nFCLZfJQH3KWq34pIXWCeiExT1cXFzvtCVQdEMA5TBdv3HeThD5fy3rwsWjSoxdhf9eL8zs2iF0As\njMW3eQVVZ+9NaETsSkFVN6nqt+7ve4ElQItIvZ7xV0GBMm72Ws55fCbjv9vAzWe1ZdofzoxuQgCn\nvfzwF8Vh+dnO8bDwGmMs1CUo9t6ERlQ6mkUkHegBzC7h4b4i8j2wEbhbVReV8PyhwFCAtDQbbhdp\nmRt2c9/4TL5fv4tTjm/I6EEZtD+2bjDBxMJYfJtXUHX23oRGxJOCiNQB/gPcoap7ij38LdBaVfeJ\nyMXAeKB98TJUdSwwFpyO5giHnLD25OTyxMfLee2rNTSsXYO/XdmNwd0DXp4iFsbi27yCqrP3JjQi\nOk9BRKrjJIRxqvrf4o+r6h5V3ef+PgWoLiIJPLYxGKrKB/M3cO7jM3n1qzVce0prpt91Fj/r0TL4\n9YpiYSy+zSuoOntvQiNiVwrifJu8AixR1SdKOacZ8KOqqoj0wUlS2yMVk/mplVv2MfKDTL78YTtd\nW9bnlet607Vlg6DDOiIWxuLbvIKqs/cmNCI2T0FETge+ABYCBe7hPwFpAKr6oojcCtyMM1LpAPAH\nVf2yrHJtnoI/DhzK59kZKxj7+SpSqidxz4Un8ss+aYk3G9mYBBH4gniqOgso8xtGVZ8Fno1UDKZk\n05f8yP0TFpG18wA/79GCey/uSJO6Nf17gdXjEu8vvjnD/NsBzZgA2TIXCSRrZzYPTFzMtMU/0r5p\nHd76zSn0bdvI3xdJxPHmc4bByheO3Nf8I/ctMZgYY8tcJIBDeQW8Mms1T09fAcDt/dtzw2ltqJEc\ngXEGibjG/1vJTiIoTpLg6rzox2NMCQJvPjLh8NUP2xnxQSYrt+zj/E7HMvLSTrQ8JrX8J1ZWIo43\nLykhlHXcmBCzpBCntu49yENTlvD+dxtoeUwtXrmuN+d2PDbyL5yI480lqfQrBWNijCWFOJNfoLw5\ney1/+WgZObn53Hp2O245ux21akTpC6rbmKP7FCD+x5u3HXp0n0LR48bEGEsKcWRB1i7uez+ThRt2\nc1q7RowalEHbJnWiG0Qijjc/3Jlso49MHLCO5jiwOzuXxz5exhuz19K4Tk1GDOjEpV2bBz8b2RgT\nGoHvp2AiY9w4SE+HatWgdWvljjHbOfeJzxg3ey3X9U1n+l39GNjtuNhICPG0fn481SUo9h6GgjUf\nxZBx42DoUMh2m+vXrROe/nN9elyTxoQxzchoUT/YACsinuYzxFNdgmLvYWjYlUIMue++IwnhMM1L\nZtuME2IrIUB8rZ8fT3UJir2HoWFJIUaoKuvWldz/s359DDQVFRdP8xniqS5BsfcwNCwpxID1O7K5\n8dW5VKt7oMTHY3LfodLmLcTifIZ4qktQ7D0MDUsKIXYwL59nP11B/ydm8vWq7Qy5bS+pqUdfLaSm\nwphYnAIQT+vnx1NdgmLvYWhYR3NI/W/lNkaMz2TVtv1c3KUZIwZ0onn9Wpx9otO3sG6dc4UwZgxc\nE4v9cPE0nyGe6hIUew9Dw+YphMyWPTk8OHkJE77fSFrDVB4Y1JmzOzQNOixjTIyzBfFiTF5+Aa9/\nvZbHP17OobwCbj+3PTef1ZaU6rZ+jomiSOyFkYj7a8QwSwoh8N26nQwfn8mijXs4o31jRg3KoE3j\n2kGHZRJNJOYK2PyDmGNJIUC7sg/x6NRlvP3NOprWrclzv+zJxV2axcZsZBN/yporUNkv8EiUaSLK\nkkIACgqU977N4pEPl7L7QC43ntaGO847gTo17eMwAYrEXAGbfxBz7FsoypZu3sOI8Zl8s2YnPdMa\n8ODgLnQ6rl7QYRkTmb0wEnF/jRhn8xSiZN/BPMZMXswlT89ixZZ9PHpZF9773amWEEx4RGKugM0/\niDl2pRBhqsrUzM08MHExm/fkcNVJrfi/C0/kmNo1gg7NmKNFYq6AzT+IOTZPIYLWbNvP/RMWMXP5\nVjo2r8eDgzPo1fqYoMMyxiQgm6cQoJzcfF6c+QPPf/YD1asJIwZ04rq+rUlOstY6Y0y4WVLw2efL\ntzLyg0zWbM9mQNfmDL+kE83qpwQdljHGeGJJwSebd+cwetJiJi/cRJvGtXn9xj6c0b5J0GEZY0yF\nWFKoorz8Av715Rr+Nm05eQXKXeedwNB+x1Mz2ZanMMbEHksKVTB3zQ6Gj89k6ea9nNWhCaMGZpDW\nKLX8JxpjTEhZUqiEHfsP8ciHS3h3bhbN66fw4rW9uKDzsbY8hTEm5llSqICCAuXduet5ZOpS9uXk\n8dszj+e2c9tT25anMMbECfs282jRxt0MH5/Jd+t20Se9IaMHZ9ChWd2gwzLGGF9FLCmISCvgNeBY\nQIGxqvpUsXMEeAq4GMgGhqjqt5GKqTL25uTyxLTlvPrlGo5JrcHjV3Tj5z1bWFORH2ydfWNCJ5JX\nCnnAXar6rYjUBeaJyDRVXVzknIuA9u7tZOAF92fgVJVJCzYxetJitu47yC/7pPHHCzrQINWWp/CF\nrbNvTChFLCmo6iZgk/v7XhFZArQAiiaFQcBr6qy18bWINBCR5u5zA7Nq6z7un7CIL1ZsI6NFPcb+\nujfdWzUIMqT4Y+vsGxNKUelTEJF0oAcwu9hDLYD1Re5nuceOSgoiMhQYCpCWFrkld3Ny83l+xkpe\nnLmKmsnVGDWoM9ec3JqkatZU5DtbZ9+YUIp4UhCROsB/gDtUdU9lylDVscBYcBbE8zG8QjOWbmHk\nhEzW7zjA4O7H8adLOtK0ri1PETG2zr4xoRTRpCAi1XESwjhV/W8Jp2wAWhW539I9FjUbdx3ggYmL\n+GjRj7RtUps3f3Myp7ZtHM0QElO3MUf3KYCts29MCERy9JEArwBLVPWJUk6bANwqIm/jdDDvjlZ/\nQm5+Af+YtZqnpq+gQJU/XtCB35xxPDWSbSXTqLB19o0JpUheKZwG/ApYKCLz3WN/AtIAVPVFYArO\ncNSVOENSr49gPIXmrN7B8PELWf7jPvp3bMr9l3amVUNbniLq2lxjScCYkInk6KNZQJk9tO6oo1si\nFUNx2/Yd5OEpS/nPt1m0aFCLl37dm/M6HRutlzfGmNBLmBnNM5Zu4Y535pN9KI9hZ7Xl1nPakVoj\nYapvjDGeJMy3YpvGteneqgEjBnSkXVNbnsIYY0qSMEkhvXFtXr2hT9BhGGNMqNlQG2OMMYUsKRhj\njClkScEYY0whSwrGGGMKWVIwxhhTyJKCMcaYQpYUjDHGFLKkYIwxppA4yw/FDhHZCpSwEL8njYFt\nPoYTJKtLOMVLXeKlHmB1Oay1qjYp76SYSwpVISJzVbV30HH4weoSTvFSl3ipB1hdKsqaj4wxxhSy\npGCMMaZQoiWFsUEH4COrSzjFS13ipR5gdamQhOpTMMYYU7ZEu1IwxhhTBksKxhhjCsVtUhCRJBH5\nTkQmlfBYTRF5R0RWishsEUmPfoTelVOXISKyVUTmu7ebgojRCxFZIyIL3TjnlvC4iMjT7ueyQER6\nBhFneTzU4ywR2V3kMxkZRJxeiEgDEXlPRJaKyBIR6Vvs8Zj4TMBTXWLicxGRDkVinC8ie0TkjmLn\nROxzieed124HlgD1SnjsRmCnqrYTkauAR4EroxlcBZVVF4B3VPXWKMZTFWerammTby4C2ru3k4EX\n3J9hVFY9AL5Q1QFRi6byngKmqurlIlIDSC32eCx9JuXVBWLgc1HVZUB3cP4gBDYA7xc7LWKfS1xe\nKYhIS+AS4OVSThkEvOr+/h5wrohINGKrKA91iSeDgNfU8TXQQESaBx1UvBKR+sCZwCsAqnpIVXcV\nOy0mPhOPdYlF5wI/qGrxVRwi9rnEZVIAngTuAQpKebwFsB5AVfOA3UCj6IRWYeXVBeAy9xLyPRFp\nFaW4KkOBj0VknogMLeHxws/FleUeC5vy6gHQV0S+F5EPRaRzNIOrgDbAVuCfbvPkyyJSu9g5sfKZ\neKkLxMbnUtRVwFslHI/Y5xJ3SUFEBgBbVHVe0LFUlce6TATSVbUrMI0jV0BhdLqq9sS59L1FRM4M\nOqBKKq8e3+KsM9MNeAYYH+0APUoGegIvqGoPYD/w/4INqdK81CVWPhcA3CawgcC/o/m6cZcUgNOA\ngSKyBngbOEdE3ih2zgagFYCIJAP1ge3RDNKjcuuiqttV9aB792WgV3RD9E5VN7g/t+C0kfYpdkrh\n5+Jq6R4LlfLqoap7VHWf+/sUoLqINI56oOXLArJUdbZ7/z2cL9aiYuIzwUNdYuhzOewi4FtV/bGE\nxyL2ucRdUlDVe1W1paqm41x6faqq1xY7bQJwnfv75e45oZvF56UuxdoRB+J0SIeOiNQWkbqHfwfO\nBzKLnTYB+LU7suIUYLeqbopyqGXyUg8RaXa4j0pE+uD8PwvdHx2quhlYLyId3EPnAouLnRb6zwS8\n1SVWPpcirqbkpiOI4OcSz6OPjiIio4C5qjoBpzPqdRFZCezA+cKNGcXqcpuIDATycOoyJMjYynAs\n8L77fzIZeFNVp4rI7wBU9UVgCnAxsBLIBq4PKNayeKnH5cDNIpIHHACuCuMfHa7fA+PcpopVwPUx\n+JkcVl5dYuZzcf/gOA/4bZFjUflcbJkLY4wxheKu+cgYY0zlWVIwxhhTyJKCMcaYQpYUjDHGFLKk\nYIwxppAlBWMqyF1ts6QVa0s87sPrDRaRTkXufyYicbERvQkfSwrGhN9goFO5ZxnjA0sKJu64s44n\nuwufZYrIle7xXiIy013I7qPDs8Hdv7yfcteuz3RnuyIifUTkK3eBtS+LzJb1GsM/RGSO+/xB7vEh\nIvJfEZkqIitE5C9FnnOjiCx3n/OSiDwrIqfizFT/qxtfW/f0K9zzlovIGT69dcYkzoxmk1AuBDaq\n6iXgLKssItVxFkEbpKpb3UQxBrjBfU6qqnZ3F7f7B5ABLAXOUNU8EekPPARc5jGG+3CWJblBRBoA\nc0TkE/ex7kAP4CCwTESeAfKBETjr9ewFPgW+V9UvRWQCMElV33PrA5Csqn1E5GLgfqB/Zd4oY4qz\npGDi0ULgcRF5FOfL9AsRycD5op/mfqkmAUXXinkLQFU/F5F67hd5XeBVEWmPs1x29QrEcD7OYoZ3\nu/dTgDT39+mquhtARBYDrYHGwExV3eEe/zdwQhnl/9f9OQ9Ir0BcxpTJkoKJO6q6XJztCS8GHhSR\n6TirmS5S1b6lPa2E+6OBGar6M3G2bP2sAmEIcJm7i9aRgyIn41whHJZP5f4fHi6jss83pkTWp2Di\njogcB2Sr6hvAX3GaZJYBTcTdt1dEqsvRm6wc7nc4HWfFyd04S6ofXo54SAXD+Aj4fZFVOXuUc/43\nQD8ROUac5dyLNlPtxblqMSbiLCmYeNQFpw1/Pk57+4OqeghnlcxHReR7YD5wapHn5IjId8CLOHt4\nA/wFeNg9XtG/xkfjNDctEJFF7v1SuXs0PATMAf4HrMHZERCcvTT+6HZYty25BGP8YaukmoQnIp8B\nd6vq3IDjqKOq+9wrhfeBf6hq8Q3bjYkou1IwJjz+7F7dZAKrCfl2kSY+2ZWCMcaYQnalYIwxppAl\nBWOMMYUsKRhjjClkScEYY0whSwrGGGMK/X/oJQWBzlNdWAAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ggxHGnndnr7E",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 331
        },
        "outputId": "635ca959-e41a-46a2-cd22-e62e8a770ecc"
      },
      "source": [
        "plot(perceptron2, 'PLA with shuffle')"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[1.90355913 2.16647532 2.4293915  2.69230769 2.95522388 3.21814007\n",
            " 3.48105626 3.74397245 4.00688863 4.26980482]\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n+3/Kr7Xn8ja7DgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RcfmVlJk6oAm",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 331
        },
        "outputId": "939d6cae-855c-41cc-df57-2e045540833d"
      },
      "source": [
        "plot(perceptron3, 'PLA_dual')"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[1.90863952 2.1694803  2.43032109 2.69116187 2.95200265 3.21284343\n",
            " 3.47368421 3.73452499 3.99536577 4.25620655]\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IbCqEOjaL9-E",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# w有细微差别，plot出来的分界面差不多。"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "dAXMohlfrXI2",
        "colab_type": "text"
      },
      "source": [
        "## scikit-learn Perceptron"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0q8vGAs_rXI3",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.linear_model import Perceptron"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bPmV4Cb5rXI4",
        "colab_type": "code",
        "outputId": "919a47e7-9132-43a7-9306-7500d1f5447d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 89
        }
      },
      "source": [
        "clf = Perceptron()\n",
        "clf.fit(X, y)"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,\n",
              "           fit_intercept=True, max_iter=1000, n_iter_no_change=5, n_jobs=None,\n",
              "           penalty=None, random_state=0, shuffle=True, tol=0.001,\n",
              "           validation_fraction=0.1, verbose=0, warm_start=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tYRFc938rXI7",
        "colab_type": "code",
        "outputId": "ae6f54f7-5c41-4509-bae6-5e6bcc8c0a11",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Weights assigned to the features.\n",
        "clf.coef_"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[ 23.2, -38.7]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 21
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ms-p2flmrXI9",
        "colab_type": "code",
        "outputId": "8dbf6e79-e8eb-44a7-85fe-9d799c9c52e8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 截距 Constants in decision function.\n",
        "clf.intercept_"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([-5.])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "glwfUSJX3XfQ",
        "colab_type": "code",
        "outputId": "119302fe-bd1f-42fb-9767-ab9287646aab",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "clf.n_iter_"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "8"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 23
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wLPY7J68rXJA",
        "colab_type": "code",
        "outputId": "84306984-2ef8-4362-88b6-adac6d20d452",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 301
        }
      },
      "source": [
        "x_ponits = np.linspace(4, 7, 10)\n",
        "y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]\n",
        "plt.plot(x_ponits, y_)\n",
        "\n",
        "plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')\n",
        "plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n",
        "plt.xlabel('sepal length')\n",
        "plt.ylabel('sepal width')\n",
        "plt.legend()"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f7379cf9da0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 24
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-NlSbrKAi4ds",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#感知机的假设空间是定义在特征空间中的所以线性分类器的集合。\n",
        "#感知机的模型复杂度体现在计算w和x的内积上，样本数目和特征空间维数是决定模型复杂度的关键。"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MPh3584iMNGu",
        "colab_type": "text"
      },
      "source": [
        "作业"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0cohIM9C65h8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "mydata = np.array([[3,3, 1],[4,3, 1],[1,1, -1]])\n",
        "X = mydata[:,:-1]\n",
        "y = mydata[:,-1]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "J4TSS2Bp8qTL",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def plot1(model):\n",
        "    x_ponits = np.linspace(0, 7, 10)\n",
        "    y_ = -(model.w[0]*x_ponits + model.b)/(model.w[1] + 1e-10)\n",
        "    plt.plot(x_ponits, y_)\n",
        "\n",
        "    plt.plot(mydata[:2, 0], mydata[:2, 1], 'bo', color='blue', label='+1')\n",
        "    plt.plot(mydata[2:, 0], mydata[2:, 1], 'bo', color='orange', label='-1')\n",
        "    plt.legend()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-5iSkbZ97C9X",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "f93e3190-4195-4114-e1e9-a75a4bcc9f8e"
      },
      "source": [
        "pla1 = PLA() # no shuffle\n",
        "pla1.fit(X, y)"
      ],
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 7, w: [0.3 0.3], b: -0.7\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5_9lg9j-OcL2",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        },
        "outputId": "fd73c8b9-560d-41df-95ba-ee91a63cd447"
      },
      "source": [
        "plot1(pla1)"
      ],
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8QgmQ74E7VRW",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "d40f45b9-54e3-4c2a-e35a-7e7e0ff8e347"
      },
      "source": [
        "pla2 = PLA(shuffle = True) # shuffle\n",
        "pla2.fit(X, y)"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 7, w: [0.3 0.3], b: -0.7\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "unMyRVjYPGMx",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        },
        "outputId": "f4b35d75-8e49-404b-8026-d90193cd788c"
      },
      "source": [
        "plot1(pla2)"
      ],
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd0VXW6xvHvm0YIvbcAQZpSA4Re\nEooCImJvWLAhgtJ1CndGnbGMM3TFgg11sCuCiigICSA1NOmdSOi9GDq/+0fivY4DJOScZOecPJ+1\nWCGbc/Z+cM087Pz2Pu825xwiIhI8QrwOICIi/qViFxEJMip2EZEgo2IXEQkyKnYRkSCjYhcRCTIq\ndhGRIKNiFxEJMip2EZEgE+bFQUuXLu1iYmK8OLSISMBasmTJfudcmcxe50mxx8TEkJyc7MWhRUQC\nlpmlZOV1WooREQkyKnYRkSCjYhcRCTKerLGLiOSEM2fOkJqaysmTJ72O4pPIyEiio6MJDw/P1vtV\n7CISNFJTUylSpAgxMTGYmddxssU5x4EDB0hNTaVatWrZ2ofPSzFmFmlmi8xshZmtNrNnfN2nyKVM\nnAgxMRASkv514kSvE11cIGUNBidPnqRUqVIBW+oAZkapUqV8+qnDH2fsp4AOzrnjZhYOzDWzb51z\nC/ywb5H/MHEi9O4NaWnp36ekpH8P0LOnd7kuJJCyBpNALvVf+fp38PmM3aU7nvFteMYvPW9PcsSw\nYf9flL9KS0vfntcEUlYJLn65K8bMQs1sObAXmO6cW3iB1/Q2s2QzS963b58/Div50M8/X952LwVS\nVskdn376KXXr1iUkJCRHP6Tpl2J3zp1zzsUC0UAzM6t3gdeMd87FOefiypTJ9BOxIhdUpcrlbfdS\nIGXNr3LyGkhiYiK9evX6j2316tXjiy++oF27dv470AX49T5259xhYBbQxZ/7FfnVc89BVNR/bouK\nSt+e1wRS1vzo12sgKSng3P9fA8nJC9xXXXUVtWvXzrkDZPDHXTFlzKx4xu8LAlcD63zdr8iF9OwJ\n48dD1apglv51/Pi8eTEykLLmR8F8DcQfd8VUAN41s1DS/6H4xDn3tR/2K3JBPXsGTjkGUtb8Jqeu\ngTRv3pxTp05x/PhxDh48SGxsLAAvvvginTt39m3nWeRzsTvnfgIa+SGLiEiuqVIlffnlQtt9sXBh\n+r0jiYmJTJgwgQkTJvi2w2zQrBgRyZeC+RqIil1E8iUvroFMmjSJ6Oho5s+fT7du3XJsacacy/3P\nEsXFxTk9aENE/G3t2rVcddVVXsfwiwv9XcxsiXMuLrP36oxdRCTIqNhFRIKMil1EJMio2EVEgoyK\nXUQkyKjYRUSCjIpdRCQHrFu3jpYtW1KgQAGGDx+eq8cOqGLftPcYC7Yc8DqGiASLrRPhyxj4ICT9\n61b/jXYsWbIkY8eOZejQoX7bZ1YFVLG/PHMTd4xfwOMfLmPXkRNexxGRQLZ1IizqDWkpgEv/uqi3\n38q9bNmyNG3alPDwcL/s73IEVLG/cFMDBnSsyXerd9NxRBKvJm7m9NnzXscSkUC0Yhic+93c3nNp\n6dsDXEAVe8GIUAZdXYsZg+JpXaM0L05bR5fRs0naoEftichlSrvIfN6LbQ8gAVXsv6pSKoo37o3j\nnfub4oD73l5E7/eS2X4wLdP3iogAEHWR+bwX254F48aNIzY2ltjYWHbu3Jnt/fgqIIv9V+1rl2Xa\nwLb8ocuVzN20n04jkxg1fQMnz5zzOpqI5HUNn4PQ383tDY1K355N/fr1Y/ny5SxfvpyKFSv6GDD7\n/PFovMpmNsvM1pjZajMb4I9gWVUgLJRHE6rzw5B4rqlbnjE/bKTTyCS+W70bLyZXikiAqNYTmo2H\nqKqApX9tNj59ux/s3r2b6OhoRo4cybPPPkt0dDRHjx71y74z4/PYXjOrAFRwzi01syLAEuAG59ya\ni70nJ8f2zt98gKenrGb9nmO0q1WGp7rXoXqZwjlyLBHJWzS2N53PZ+zOuV3OuaUZvz8GrAUq+brf\n7GpZvRTf9G/DU93rsCzlEF1Gz+aFb9dy/NRZryKJiOQqv66xm1kM6c8/XejP/V6usNAQ7m9djZlD\nE7ghthKvJ22h44hEJi/foeUZEQl6fit2MysMfA4MdM7910KSmfU2s2QzS963L3duTyxTpAD/urUh\nX/RtRdkikQz4aDm3j1/A2l25s84lIrkvGE7efP07+KXYzSyc9FKf6Jz74kKvcc6Nd87FOefiypQp\n44/DZlnjKiX4sl9rnr+xPhv3HKPb2Dk8PWU1R06cydUcIpKzIiMjOXDgQECXu3OOAwcOEBkZme19\n+OPiqQHvAgedcwOz8h4vn3l6OO00I77fwMSFKZSIiuAPXa7klibRhISYJ3lExH/OnDlDamoqJ0+e\n9DqKTyIjI4mOjv6vcQRZvXjqj2JvA8wBVgK/fr7/z865qRd7T154mPXqnUd4avJqklMO0bBycf52\nfV0aVi7uaSYRkUvJtWLPjrxQ7JD+I8+Xy3fw/NR17D9+itvjKvNE59qUKlzA62giIv8l1253DGRm\nxo2Nopk5JJ6H2lTjsyWptB+eyHvzt3H2nIaLiUhgytfF/qsikeEM61aHbwe0pX50Mf46eTXXvTSX\nRVsPeh1NROSyqdh/o2a5Ivz7wea82rMxR0+c4bbX5zPwo2XsORrYF2JEJH9Rsf+OmdG1fgVmDInn\n8Q41mLpyNx2GJzJ+tma/i0hgULFfRFREGEOuqc33g9rR4opSPD91HV3HzGbORs1+F5G8TcWeiZjS\nhXirV1Pe7hXH2fOOe95aRJ/3l5B6SLPfRSRvUrFnUYcry/HdwHY80bk2iRv20nFEEmN/2KjZ7yKS\n56jYL0NkeCj92tdg5pAEOtUpx8jpG7hm1Gymr9kT0B9hFpHgomLPhorFCzLursZ88FBzCoSF8PB7\nydw/YTFb9//idTQRERW7L1rVKM3UAW35n25XkbztEJ1HzebFaev4RbPfRcRDKnYfhYeG8FDbK5g5\nNJ7rGlbg1cTNdByRxFcrdmp5RkQ8oWL3k7JFIhl5WyyfP9qSUoUjePzDZdz5xgLW7z7mdTQRyWdU\n7H7WpGpJpjzWhmdvqMe63ce4duwc/vbVGo6e1Ox3EckdKvYcEBpi3N2iKrOGJHB708q8M28rHYYn\n8mnyds6f1/KMiOQsFXsOKlEogudvrM+Ufm2oXDKKJz77iZtfm8fK1CNeRxORIKZizwX1o4vxeZ9W\nDL+1IdsPpnH9uLn8edJKDv1y2utoIhKEVOy5JCTEuKVJNDOHJvBA62p8vHg7CcMTeX9BCue0PCMi\nfuSvh1m/bWZ7zWyVP/YXzIpGhvOX69Jnv9epUJS/fLmK7i/NZUmKZr+LiH/464x9AtDFT/sKDlsn\nwpcx8EFI+tetE//jj2uVK8IHDzfn5bsacSjtNDe/Op/Bnyxn7zHNfhcR3/il2J1zswGdcv5q60RY\n1BvSUgCX/nVR7/8qdzPjugYVmTE4nr4J1fl6xS46DE/izTlbOKNH84lINmmNPSesGAbnfjfW91xa\n+vYLKFQgjCe7XMl3g9oRF1OCZ79ZS9cxc/hx0/5cCCsiwSbXit3MeptZspkl79sX5A+rSPv58rZn\nqFa6EO/0asqb98Zx6uw5er65kH4Tl7Lj8IkcCCkiwSrXit05N945F+eciytTpkxuHdYbUVUub/tv\nmBmd6pRj+qB4Bl9dix/W7aHTiCRenqnZ7yKSNVqKyQkNn4PQqP/cFhqVvj2LIsND6d+xJjMGx5NQ\nuwzDv99A59Gzmbluj5/Dikiw8dftjh8C84HaZpZqZg/6Y78Bq1pPaDYeoqoClv612fj07ZcpukQU\nr97dhPcfbEZYiPHAhGQenLCYlAOa/S4iF2ZejJaNi4tzycnJuX7cQHf67HnenbeN0TM2cOaco3e7\nK+jbvjpREWFeRxORXGBmS5xzcZm9TksxASQiLISH213BzKEJdGtQgZdnbaLTiCSmrtyl2e8i8n9U\n7AGoXNFIRt0ey6d9WlIsKoK+E5dy91sL2bhHs99FRMUe0JrGlOSrx1rz9x51WZl6hK5j5vDcN2s4\nptnvIvmaij3AhYWGcE/LGGYNTeDWuGjenLuVDiOS+GJpqpZnRPIpFXuQKFW4AC/c1IAv+7amYvGC\nDP5kBbe+Np/VOzX7XSS/UbEHmYaVizPp0Vb885YGbN3/C91fmstfvlzF4TTNfhfJL1TsQSgkxLgt\nrjIzhyZwb8sYJi5Mof3wRD5Y+LNmv4vkAyr2IFasYDhPX1+Xb/q3pWa5Ivx50kpuGPcjS38+5HU0\nEclBKvZ84KoKRfm4dwvG3BHL3mMnuemVeTzx6Qr2HTvldTQRyQEq9nzCzOgRW4mZQxLoE1+dL5fv\noMPwRN6eu5Wzmv0uElRU7PlMoQJh/LHrlUwb2I7YKsX529dr6DZ2LvM3H/A6moj4iYo9n6pepjDv\nPdCM1+9pwi+nz3LnGwt4/MNl7Dqi2e8igU7Fno+ZGZ3rlmfG4HgGdqrJ96t303FEEq8kbuLUWc1+\nFwlUKnYhMjyUgZ1qMWNwPG1qlOaf09bTZfQcEtfv9TqaiGSDil3+T+WSUYy/N453H2iGAb3eWczD\n7yWz/WBapu8VkbxDxS7/Jb5WGaYNbMcfu17Jj5v203FkEiOnb+DEaS3PiAQCFbtcUERYCH3iqzNz\nSAJd6pZn7A8b6TQyiWmrdmu4mEge569H43Uxs/VmtsnM/uiPfUreUL5YJGPvbMRHvVtQuEAYff69\nhHvfXsTmfce9jiYiF+FzsZtZKDAO6ArUAe40szq+7lfylhZXlOKb/m14unsdlm8/TJfRs3lh6lqO\nnzrrdTQR+R1/nLE3AzY557Y4504DHwE9/LBfyWPCQkPo1boas4YmcGOjSrw+ewsdhicyefkOLc+I\n5CH+KPZKwPbffJ+asU2CVOnCBfjnLQ2Z1LcV5YtFMuCj5dw+fgFrdx31OpqIkIsXT82st5klm1ny\nvn37cuuwkoMaVSnBl31b88JN9dm45xjdxs7h6SmrOZKmR/OJeMkfxb4DqPyb76Mztv0H59x451yc\ncy6uTJkyfjis5AUhIcadzaowa2gCd7eoynvzt9F+RCIfL/6Z85r9LuIJfxT7YqCmmVUzswjgDmCK\nH/YrAaR4VAR/61GPrx5vwxWlC/GHz1dy4ys/smL7Ya+jieQ7Phe7c+4s8BjwHbAW+MQ5t9rX/Upg\nqluxGJ/2acmo2xuy88hJbnjlR/74+U8cOK7Z7yK5xby4myEuLs4lJyfn+nEldx07eYaXZm7i7blb\niYoIZcg1tenZvAphofpcnEh2mNkS51xcZq/T/8MkxxSJDOfP117FtIFtaRBdnKemrOa6l+ayaOtB\nr6OJBDUVu+S4GmWL8P6DzXi1Z2OOnTzLba/PZ+BHy9hz9KTX0USCkopdcoWZ0bV+BWYMjqd/hxpM\nXbWbDsMTeT1pM6fP6tF8Iv6kYpdcVTAilMHX1Gb6oHa0rF6KF75dR5cxs5m9QZ9tEPEXFbt4omqp\nQrx5X1Pe6dWU8+cd9769iD7vLyH1kGa/i/hKxS6ean9lWb4b1I4nOtcmacM+Oo5IYsyMjZw8o9nv\nItmlYhfPFQgLpV/7GvwwJJ5OdcoxasYGrh6VxPQ1ezRcTCQbVOySZ1QsXpBxdzXmg4eaExkWysPv\nJXP/hMVs3f+L19FEAoqKXfKcVjVKM3VAW/5yXR2WbDtE51GzeXHaOn7R7HeRLFGxS54UHhrCg22q\n8cPQeLo3rMiriZvpOCKJr1bs1PKMSCZU7JKnlS0SyYjbGvL5oy0pVTiCxz9cxp1vLGD97mNeRxPJ\ns1TsEhCaVC3JlMfa8NyN9Vi3+xjXjp3DM1+t5sgJzX4X+T0VuwSM0BCjZ/OqzBqSwB1NKzNh3jY6\njkjk0+Ttmv0u8hsqdgk4JQpF8NyN9fnqsTZUKRnFE5/9xM2vzWNl6hGvo4nkCSp2CVj1KhXjsz6t\nGHFrQ7YfPMH14+bypy9WcvCX015HE/GUil0CWkiIcXOTaGYOjef+VtX4JHk77Ycn8v6CFM5peUby\nKRW7BIWikeH8tXsdvh3QljoVivKXL1fR/aW5JG/T7HfJf3wqdjO71cxWm9l5M8v0qR4iOa1WuSJ8\n8HBzXr6rEYfSTnPLa/MZ/PFy9mr2u+Qjvp6xrwJuAmb7IYuIX5gZ1zWoyA9D4unXvjpf/7SLDiOS\neHPOFs6c0+x3CX4+Fbtzbq1zbr2/woj4U1REGE90vpLvBrUjLqYEz36zlq5j5vDjpv1eRxPJUbm2\nxm5mvc0s2cyS9+3TQxUk91QrXYh3ejXlzXvjOH32PD3fXEjfiUvYcfiE19FEcoRlNnfDzGYA5S/w\nR8Occ5MzXpMIDHXOJWfloHFxcS45OUsvFfGrk2fO8cbsLYxL3ATAY+1r8FDbK4gMD/U4mUjmzGyJ\ncy7T65lhmb3AOdfJP5FEvBcZHsrjHWtyY+NKPPfNWoZ/v4FPklN5qnsdOl5Vzut4In6h2x0lX4ou\nEcWrdzfh/QebER5qPPhuMg9MWMw2zX6XIODr7Y43mlkq0BL4xsy+808skdzRtmYZvh3QjmHXXsXC\nLQe4ZtRshn+3nrTTmv0ugSvTNfacoDV2yYv2Hj3JC9+uY9KyHVQsFsmwbnW4tn55zMzraCJA1tfY\ntRQjkqFs0UhG3R7LJ4+0pFhUBP0+WErPNxeycY9mv0tgUbGL/E6zaiX56rHW/L1HXVbtOELXMXN4\n9us1HDup2e8SGFTsIhcQFhrCPS1jmDU0gVvjonnrx620H57E50tSNftd8jwVu8gllCpcgBduasCX\nfVtTqURBhny6gltfn8+qHZr9LnmXil0kCxpWLs6kR1vxz1sasG3/L3R/eS7DJq3kkGa/Sx6kYhfJ\nopAQ47a4yswcmsB9LWP4cNHPtB+RyMSFmv0ueYuKXeQyFSsYztPX1+Wb/m2pVa4Iwyatose4uSxJ\nOeR1NBFAxS6SbVdVKMrHvVsw5o5Y9h07xc2vzmPopyvYd+yU19Ekn1Oxi/jAzOgRW4mZQxLoE1+d\nyct30GF4Im/N3arZ7+IZFbuIHxQqEMYfu17JtIHtiK1SnL9/vYZuY+cwb7Nmv0vuU7GL+FH1MoV5\n74FmvH5PE9JOn+OuNxby2AdL2XVEs98l96jYRfzMzOhctzwzBsczsFNNpq/ZQ4fhSYybtYlTZ895\nHU/yARW7SA6JDA9lYKdazBgcT7tapfnXd+vpPGo2s9bv9TqaBDkVu0gOq1wyitfviePdB5oRYsb9\n7yzmoXeT+flAmtfRJEip2EVySXytMkwb2I4/dr2SeZv302lUEiO/X8+J01qeEf9SsYvkooiwEPrE\nV2fmkAS61C3P2Jmb6DQyiWmrduHFsxEkOKnYRTxQvlgkY+9sxEe9W1AkMow+/17KvW8vYtPe415H\nkyDg66Px/mVm68zsJzObZGbF/RVMJD9ocUUpvn68DU93r8Py7YfpMno2z09dy/FTejSfZJ+vZ+zT\ngXrOuQbABuBPvkcSyV/CQkPo1boas4YmcHPjaMbP3kKH4Yl8uWyHlmckW3wqdufc9865X08tFgDR\nvkcSyZ9KFy7Ai7c0YFLfVpQvFsnAj5dz2+vzWb1Ts9/l8vhzjf0B4NuL/aGZ9TazZDNL3rdvnx8P\nKxJcGlUpwZd9W/OPm+qzed8vdH9pLn+dvIojaXo0n2SNZfajnpnNAMpf4I+GOecmZ7xmGBAH3OSy\n8LNjXFycS05OzkZckfzlSNoZRk5fz/sLUigeFcGTnWtzW1xlQkLM62jiATNb4pyLy/R1vq7hmVkv\n4BGgo3MuS5+4ULGLXJ41O4/y1JRVLN52iIbRxXimRz1iK+tehfwmq8Xu610xXYAngeuzWuoicvnq\nVCzKJ4+0ZMwdsew6cpIbxv3Ik5+tYP9xzX6X/+bTGbuZbQIKAAcyNi1wzvXJ7H06YxfJvuOnzvLS\nDxt5a+5WCkaEMuTqWtzdoiphofpYSrDLtaWY7FCxi/hu097jPPPVauZs3M+V5YvwzPV1aX5FKa9j\nSQ7KlaUYEfFOjbLps99fu7sJx06e5fbxC+j/4TJ2HznpdTTxmIpdJICZGV3qpc9+79+xJtNW76bD\niEReS9rM6bN6NF9+pWIXCQIFI0IZfHUtZgyKp1X10vzj23V0GT2bpA36zEh+pGIXCSJVSkXx5n1x\nvHN/Uxxw39uL6P1eMtsP6qa1/ETFLhKE2tcuy7SBbXmyS23mbNxPp5FJjJ6xgZNnNPs9P1CxiwSp\nAmGh9E2owcyh8VxTtzyjZ2yk08gkvl+9W8PFgpyKXSTIVShWkJfubMSHD7cgKiKU3u8v4b53FrN5\nn2a/BysVu0g+0bJ6Kb7p35a/XleHZSmH6DJ6Nv/4dh2/aPZ70FGxi+Qj4aEhPNCmGjOHJnBDbCVe\nS9pMxxFJTFmxU8szQUTFLpIPlSlSgH/d2pAv+raidJEI+n+4jDvGL2Dd7qNeRxM/ULGL5GONq5Rg\ncr82PH9jfdbvOUa3sXN5espqjpzQ7PdApmIXyedCQ4y7mldh1pAE7mxWmffmb6PD8EQ+Sd7O+fNa\nnglEKnYRAaBEoQievaE+Ux5rQ0zpQjz52U/c9Oo8fko97HU0uUwqdhH5D/UqFeOzPi0ZeVtDUg+d\noMe4H/nTFz9x8JfTXkeTLFKxi8h/MTNuahzNrKHxPNi6Gp8mp9J+eCLvz9/GOS3P5HkqdhG5qCKR\n4fzPdXX4dkBb6lYsyl8mr6b7S3NZvO2g19HkEnx9NN7fzewnM1tuZt+bWUV/BRORvKNmuSJMfKg5\nr/RszOG009z62nwGfbycvUc1+z0v8vXReEWdc0czft8fqKNH44kEt7TTZ3ll1mbGz95CRFgIAzrW\npFfrGML1aL4clytPUPq11DMUArT4JhLkoiLCGNq5Nt8PakezaiV5bupauo6Zw9yN+72OJhl8/ifW\nzJ4zs+1AT+CvvkcSkUAQU7oQb/dqylv3xXHm3Hnufmshj/57CTsOn/A6Wr6X6VKMmc0Ayl/gj4Y5\n5yb/5nV/AiKdc09dZD+9gd4AVapUaZKSkpLt0CKSt5w8c44352zh5VmbAOiXUIOH211BZHiox8mC\nS1aXYnxaY//dAasAU51z9TJ7rdbYRYLTjsMneO6bNUxduZsqJaN4qnsdOl5VzutYQSNX1tjNrOZv\nvu0BrPNlfyIS2CoVL8grPZsw8aHmRISF8OC7ydz/ziK27f/F62j5iq93xXwO1AbOAylAH+fcjsze\npzN2keB35tx5Jvy4jTE/bOT02fM83K4a/drXICoizOtoASvXl2Iuh4pdJP/Ye/Qk//h2HV8s20GF\nYpH8T7c6XFu/PGbmdbSAkytLMSIimSlbNJKRt8fyWZ+WlIiKoN8HS7nrjYVs2HPM62hBS8UuIrki\nLqYkXz3ehr/fUI81u47Sdcwc/v71Go6e1Ox3f1Oxi0iuCQ0x7mlRlVlDE7gtrjJv/7iVDsOT+HxJ\nqma/+5GKXURyXclCEbxwU30m92tNdImCDPl0Bbe8No9VO454HS0oqNhFxDMNoovzxaOt+NctDfj5\nYBrdX57LsEkrOaTZ7z5RsYuIp0JCjFvjKvPDkAR6tYrho8XbaT8ikYkLUzT7PZtU7CKSJxQrGM5T\n3esytX9bapcrwrBJq+gxbi5LUg55HS3gqNhFJE+pXb4IH/VuwUt3NmL/sdPc/Oo8hnyygr3HNPs9\nq1TsIpLnmBndG1bkhyHxPJpQnSkrdtBxeBJvzd3KmXPnvY6X56nYRSTPKlQgjD90uZLvBrajcdUS\n/P3rNXQbO4d5mzX7/VJU7CKS511RpjAT7m/KG/fGceLMOe56YyH9PljKTs1+vyAVu4gEBDPj6jrl\nmD4onkGdajFjzR46jkhi3KxNnDp7zut4eYqKXUQCSmR4KAM61WTG4Hjia5XhX9+tp/Oo2cxat9fr\naHmGil1EAlLlklG8dk8T3nugGSEhxv0TFvPQu4tJOaDZ7yp2EQlo7WqVYdqAdvyp65XM33yAq0fN\nZuT36zlxOv8uz6jYRSTgRYSF8Eh8dWYOTeDaeuUZO3MTnUYmMW3VLrx45oTXVOwiEjTKFY1k9B2N\n+Lh3C4pEhtHn30u5561FbNqbv2a/+6XYzWyImTkzK+2P/YmI+KL5FaX4+vE2PHN9XX5KPUyX0XN4\nfupajuWT2e8+F7uZVQauAX72PY6IiH+EhYZwX6sYZg1N4ObG0bwxZwsdRiQxaVlq0C/P+OOMfRTw\nJBDc/6VEJCCVKlyAF29pwKS+ralYLJJBH6/gttfns3pn8M5+96nYzawHsMM5t8JPeUREckRs5eJM\n6tuaF2+uz+Z9v9D9pbn8dfIqDqcF3+x3y+xHEjObAZS/wB8NA/4MXOOcO2Jm24A459wFhziYWW+g\nN0CVKlWapKSk+JJbRCTbjqSdYeT09by/IIXiURE80bk2t8VVJjTEvI52SWa2xDkXl+nrsrvWZGb1\ngR+AtIxN0cBOoJlzbvel3hsXF+eSk5OzdVwREX9Zs/MoT09ZzaJtB2kQXYxnrq9LoyolvI51UVkt\n9mwvxTjnVjrnyjrnYpxzMUAq0DizUhcRySvqVCzKx4+0YMwdsew+cpIbX5nHk5+tYP/xU15H84nu\nYxeRfM3M6BFbiZlDE3ik3RV8sXQH7Ycn8s6PWzkboLPf/VbsGWfuGpIsIgGpcIEw/nTtVUwb2I7Y\nysV55qs1XPfSXBZsOeB1tMumM3YRkd+oUbYw7z3QjNfubsKxk2e5Y/wC+n+4jN1HAufRfCp2EZHf\nMTO61CvPjMHx9O9Yk2mrd9NhRCKvJm7m9Nm8vzyjYhcRuYiCEaEMvroWMwbF07pGaV6cto4uo2eT\ntGGf19EuScUuIpKJKqWieOPeON65vykOuO/tRfR+L5ntB9Myfa8XVOwiIlnUvnZZpg1sy5NdajNn\n4346jUxi1PQNnDyTt2a/q9hFRC5DgbBQ+ibUYObQeK6pW54xP2yk08gkvlu9O88MF1Oxi4hkQ4Vi\nBXnpzkZ8+HALoiJCeeT9Jdz3zmI27zvudTQVu4iIL1pWL8U3/dvy1+vqsCzlEF1Gz+aFb9dy/NRZ\nzzKp2EVEfBQeGsIDbaoxc2giztjrAAAFJ0lEQVQCPWIr8XrSFjqOSGTy8h2eLM+o2EVE/KRMkQIM\nv7Uhnz/aijJFCjDgo+XcPn4Ba3cdzdUcKnYRET9rUrUEk/u14fkb67NhzzG6jZ3D01NWc+RE7jya\nT8UuIpIDQkOMu5pXYdaQBO5qXoV352+jw/BE5m3O+ZFaKnYRkRxUolAEz95Qn68ea0OdikW5onTh\nHD9mWI4fQUREqFepGO8/2DxXjqUzdhGRIKNiFxEJMip2EZEg41Oxm9nTZrbDzJZn/LrWX8FERCR7\n/HHxdJRzbrgf9iMiIn6gpRgRkSDjj2J/zMx+MrO3zayEH/YnIiI+yLTYzWyGma26wK8ewKtAdSAW\n2AWMuMR+eptZspkl79uXtx8rJSISyMxfk8fMLAb42jlXLwuv3QekZPNQpYGc/0yu/wRS3kDKCoGV\nN5CyQmDlDaSs4Fveqs65Mpm9yKeLp2ZWwTm3K+PbG4FVWXlfVoJd4pjJzrm47L4/twVS3kDKCoGV\nN5CyQmDlDaSskDt5fb0r5p9mFgs4YBvwiM+JRETEJz4Vu3PuHn8FERER/wjE2x3Hex3gMgVS3kDK\nCoGVN5CyQmDlDaSskAt5/XbxVERE8oZAPGMXEZFLCKhiN7MuZrbezDaZ2R+9znMpGR/Y2mtmWbpT\nyEtmVtnMZpnZGjNbbWYDvM50MWYWaWaLzGxFRtZnvM6UGTMLNbNlZva111kyY2bbzGxlxuynZK/z\nZMbMipvZZ2a2zszWmllLrzNdiJnV/s1MreVmdtTMBubY8QJlKcbMQoENwNVAKrAYuNM5t8bTYBdh\nZu2A48B7Wbm330tmVgGo4JxbamZFgCXADXnxv62ZGVDIOXfczMKBucAA59wCj6NdlJkNBuKAos65\n67zOcylmtg2Ic84FxH3hZvYuMMc596aZRQBRzrnDXue6lIwu2wE0d85l9/M8lxRIZ+zNgE3OuS3O\nudPAR0APjzNdlHNuNnDQ6xxZ4Zzb5ZxbmvH7Y8BaoJK3qS7MpTue8W14xq88e3ZiZtFAN+BNr7ME\nGzMrBrQD3gJwzp3O66WeoSOwOadKHQKr2CsB23/zfSp5tHwCWcYniBsBC71NcnEZSxvLgb3AdOdc\nns0KjAaeBM57HSSLHPC9mS0xs95eh8lENWAf8E7GUtebZlbI61BZcAfwYU4eIJCKXXKYmRUGPgcG\nOueOep3nYpxz55xzsUA00MzM8uRSl5ldB+x1zi3xOstlaOOcawx0BfplLCnmVWFAY+BV51wj4Bcg\nr197iwCuBz7NyeMEUrHvACr/5vvojG3iBxnr1Z8DE51zX3idJysyfuyeBXTxOstFtAauz1i3/gjo\nYGb/9jbSpTnndmR83QtMIn0JNK9KBVJ/8xPbZ6QXfV7WFVjqnNuTkwcJpGJfDNQ0s2oZ/+rdAUzx\nOFNQyLgg+Raw1jk30us8l2JmZcyseMbvC5J+MX2dt6kuzDn3J+dctHMuhvT/vc50zt3tcayLMrNC\nGRfPyVjSuIYszn/ygnNuN7DdzGpnbOoI5LkL/r9zJzm8DAP+eYJSrnDOnTWzx4DvgFDgbefcao9j\nXZSZfQgkAKXNLBV4yjn3lrepLqo1cA+wMmPtGuDPzrmpHma6mArAuxl3FoQAnzjn8vxthAGiHDAp\n/d95woAPnHPTvI2UqceBiRkne1uA+z3Oc1EZ/1heTS7M1AqY2x1FRCRrAmkpRkREskDFLiISZFTs\nIiJBRsUuIhJkVOwiIkFGxS4iEmRU7CIiQUbFLiISZP4X8kmam9GEcr4AAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "q3hSFFBSN89F",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "1f237fd0-3534-4f27-b4af-67d5900c194b"
      },
      "source": [
        "pla0 = PLA_dual()\n",
        "pla0.fit(X,y)"
      ],
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "finished at iters: 5, w: [0.1 0.1], b: -0.30000000000000004\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Z4bL3-IuPIcV",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        },
        "outputId": "69f51e29-0e83-4352-943f-dfe426b0cc4a"
      },
      "source": [
        "plot1(pla0)"
      ],
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n82G2i7wAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dTKonSol-jsk",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 89
        },
        "outputId": "2af024c9-67e8-4f44-947a-ef716ccdb62c"
      },
      "source": [
        "# scikit-learn\n",
        "pla3 = Perceptron()\n",
        "pla3.fit(X,y)"
      ],
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,\n",
              "           fit_intercept=True, max_iter=1000, n_iter_no_change=5, n_jobs=None,\n",
              "           penalty=None, random_state=0, shuffle=True, tol=0.001,\n",
              "           validation_fraction=0.1, verbose=0, warm_start=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 33
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_FmsLs4y_7ND",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "b4060663-fb02-431f-e705-011561618c94"
      },
      "source": [
        "pla3.coef_"
      ],
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[1., 0.]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 34
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jVZWGawqAVGr",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "dc3ec4bb-0b55-44bb-cacb-fce13b860918"
      },
      "source": [
        "pla3.intercept_"
      ],
      "execution_count": 35,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([-2.])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 35
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0qRoaBt1BHig",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 294
        },
        "outputId": "1f185dd5-c464-41a6-c3b9-60389e7e4541"
      },
      "source": [
        "x_ponits = np.linspace(0, 7, 10)\n",
        "y_ = -(pla3.coef_[0][0]*x_ponits + pla3.intercept_)/(pla3.coef_[0][1] + 1e-10)\n",
        "plt.plot(x_ponits, y_)\n",
        "\n",
        "plt.plot(mydata[:2, 0], mydata[:2, 1], 'bo', color='blue', label='+1')\n",
        "plt.plot(mydata[2:, 0], mydata[2:, 1], 'bo', color='orange', label='-1')\n",
        "plt.legend()"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f7379b622b0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 36
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nmx8AAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Lw4Bn8zZJylR",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from time import time\n",
        "lrs = np.arange(0.1, 1.0, 0.1)\n",
        "t = []\n",
        "for lr in lrs:\n",
        "    start = time()\n",
        "    pla = Perceptron(eta0 = lr)\n",
        "    pla.fit(X, y)\n",
        "    end = time()\n",
        "    t.append(end - start)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "miizuAYYKElC",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 179
        },
        "outputId": "02359b20-62fa-451a-961c-c47cd889955f"
      },
      "source": [
        "t"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.005453586578369141,\n",
              " 0.004275083541870117,\n",
              " 0.0010335445404052734,\n",
              " 0.0007185935974121094,\n",
              " 0.000614166259765625,\n",
              " 0.000614166259765625,\n",
              " 0.0004963874816894531,\n",
              " 0.00043654441833496094,\n",
              " 0.0004296302795410156]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 38
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "v8e5GRQTLMZJ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 299
        },
        "outputId": "90a569ea-0f6f-469c-c2a4-3bca60b7a5ea"
      },
      "source": [
        "plt.figure()\n",
        "plt.plot(lrs,t)\n",
        "plt.title('time cost with different lr')"
      ],
      "execution_count": 39,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Text(0.5, 1.0, 'time cost with different lr')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 39
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    }
  ]
}